﻿#ifndef READ_SESSION_H
#define READ_SESSION_H

#include "session.h"

namespace TFTP {

/**
* @brief 数据发送端
*/
class ReadSession : public Session
{
public:
    ~ReadSession();
    /**
    * @brief 解析确认数据包并发送正确的数据
    * @param dgram Datagram to parse
    * @return 如果ack数据包被接受且未引发错误，则为false，否则为true
    * @note 如果parseAck（）返回true，则调用函数应删除该对象
    */
    bool parseAck(const QByteArray &dgram);
protected:
    ReadSession(TransferInfo T) : Session(T),buffer(nullptr) { }

    /**
    * @brief 加载文件数据到内存中
    * @note 此函数用于分配文件所需的所有空间。这可能是最大32Mb。请确保您有足够的内存支持此操作。
    */
    void loadFile();

    /**
    * @brief 将数据发送到对端
    * @return 如果已发送所有数据包，则此函数返回true
    数据包格式如下：
    <pre>
          2 bytes    2 bytes       n bytes
          ---------------------------------
          DATA  | 03 | Block #|    Data    |
          ---------------------------------
    </pre>
    */
    bool sendData();
    QByteArray *buffer; ///< Byte array with  content
};

};

#endif
